﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq.SqlClient;
using DataLayer.dbml;
using System.Data;
using DataLayer.Utilities;

namespace DataLayer.Controller
{
    /// <summary>
    /// Clase responsable de las oepraciones relacionadas con las oportunidades
    /// </summary>
    public class OpportunityController : GenericController<OPORTUNIDAD, DataClassesDataContext>
    {
        /// <summary>
        /// Retorna lista de opoertunidades asociadas a un proyecto
        /// </summary>
        /// <param name="idProject">Id del proyecto en Sales Force</param>
        /// <returns></returns>
        public static List<OPORTUNIDAD> GetAllByProject(string idProject)
        {
            return (from o in DataContext.OPORTUNIDAD
                    where o.ID_PROYECTOSFDC == idProject
                    select o).ToList<OPORTUNIDAD>();            
        }        

        /// <summary>
        /// Retorna oportunidades que cumplen con los criterios de búsqueda
        /// </summary>
        /// <param name="id"></param>
        /// <param name="jerarquia"></param>
        /// <param name="busqueda"></param>
        /// <returns></returns>
        public static DataTable GetOpportunityDetail(string id, PropertiesApp.Jerarquia jerarquia, string busqueda, string idCuenta)
        {
            DataTable dt = new DataTable();
            switch (jerarquia)
            {
                case PropertiesApp.Jerarquia.Servicio:
                    var detail = from o in DataContext.OPORTUNIDAD
                                 join p in DataContext.PROYECTO on o.ID_PROYECTOSFDC equals p.ID_PROYECTOSFDC
                                 where o.ID_OPORTUNIDADSDFC == id
                                 && (
                                 (busqueda == string.Empty ? true : SqlMethods.Like(o.ID_OPORTUNIDAD, "%" + busqueda + "%"))
                                 || (busqueda == string.Empty ? true : SqlMethods.Like(o.NOMBRE_OPORTUNIDAD, "%" + busqueda + "%"))
                                 || (busqueda == string.Empty ? true : SqlMethods.Like(o.ETAPA, "%" + busqueda + "%"))
                                 || (busqueda == string.Empty ? true : SqlMethods.Like(o.ANCHO_BANDA, "%" + busqueda + "%"))
                                 || (busqueda == string.Empty ? true : SqlMethods.Like(p.NOMBRE_PROYECTO, "%" + busqueda + "%"))
                                 )
                                 select new
                                 {
                                     id_oportunidadSF = o.ID_OPORTUNIDADSDFC,
                                     id_oportunidad = o.ID_OPORTUNIDAD,
                                     nombre_oportunidad = o.NOMBRE_OPORTUNIDAD,
                                     etapa = o.ETAPA,
                                     ancho_banda = o.ANCHO_BANDA,
                                     id_proyecto = o.ID_PROYECTOSFDC,
                                     nombre_proyecto = p.NOMBRE_PROYECTO
                                 };                        

                    dt = ConvertData.ToDataTable(detail);
                    break;
                case PropertiesApp.Jerarquia.Proyecto:
                    var detail2 = from o in DataContext.OPORTUNIDAD
                                 join p in DataContext.PROYECTO on o.ID_PROYECTOSFDC equals p.ID_PROYECTOSFDC
                                 where o.ID_PROYECTOSFDC == id
                                 && (
                                 (busqueda == string.Empty ? true : SqlMethods.Like(o.ID_OPORTUNIDAD, "%" + busqueda + "%"))
                                 || (busqueda == string.Empty ? true : SqlMethods.Like(o.NOMBRE_OPORTUNIDAD, "%" + busqueda + "%"))
                                 || (busqueda == string.Empty ? true : SqlMethods.Like(o.ETAPA, "%" + busqueda + "%"))
                                 || (busqueda == string.Empty ? true : SqlMethods.Like(o.ANCHO_BANDA, "%" + busqueda + "%"))
                                 || (busqueda == string.Empty ? true : SqlMethods.Like(p.NOMBRE_PROYECTO, "%" + busqueda + "%"))
                                 )
                                 select new
                                 {
                                     id_oportunidadSF = o.ID_OPORTUNIDADSDFC,
                                     id_oportunidad = o.ID_OPORTUNIDAD,
                                     nombre_oportunidad = o.NOMBRE_OPORTUNIDAD,
                                     etapa = o.ETAPA,
                                     ancho_banda = o.ANCHO_BANDA,
                                     id_proyecto = o.ID_PROYECTOSFDC,
                                     nombre_proyecto = p.NOMBRE_PROYECTO
                                 };                        

                    dt = ConvertData.ToDataTable(detail2);

                    break;
                case PropertiesApp.Jerarquia.Cliente:
                    var detail3 = from o in DataContext.OPORTUNIDAD
                                  join p in DataContext.PROYECTO on o.ID_PROYECTOSFDC equals p.ID_PROYECTOSFDC
                                  join cl in DataContext.CUENTA_CLIENTEFINAL on p.ID_CUENTASDFC_ID_CLIENTEFINALSDFC equals cl.ID_CUENTASDFC_ID_CLIENTEFINALSDFC                                  
                                  where cl.ID_CLIENTEFINALSDFC == id
                                     && (
                                     (busqueda == string.Empty ? true : SqlMethods.Like(o.ID_OPORTUNIDAD, "%" + busqueda + "%"))
                                     || (busqueda == string.Empty ? true : SqlMethods.Like(o.NOMBRE_OPORTUNIDAD, "%" + busqueda + "%"))
                                     || (busqueda == string.Empty ? true : SqlMethods.Like(o.ETAPA, "%" + busqueda + "%"))
                                     || (busqueda == string.Empty ? true : SqlMethods.Like(o.ANCHO_BANDA, "%" + busqueda + "%"))
                                     || (busqueda == string.Empty ? true : SqlMethods.Like(p.NOMBRE_PROYECTO, "%" + busqueda + "%"))
                                     )
                                  select new
                                  {
                                      id_oportunidadSF = o.ID_OPORTUNIDADSDFC,
                                      id_oportunidad = o.ID_OPORTUNIDAD,
                                      nombre_oportunidad = o.NOMBRE_OPORTUNIDAD,
                                      etapa = o.ETAPA,
                                      ancho_banda = o.ANCHO_BANDA,
                                      id_proyecto = o.ID_PROYECTOSFDC,
                                      nombre_proyecto = p.NOMBRE_PROYECTO
                                  };                        

                    dt = ConvertData.ToDataTable(detail3);

                    break;
                case PropertiesApp.Jerarquia.Todos:
                    var detail4 = from o in DataContext.OPORTUNIDAD
                                  join p in DataContext.PROYECTO on o.ID_PROYECTOSFDC equals p.ID_PROYECTOSFDC
                                  join cl in DataContext.CUENTA_CLIENTEFINAL on p.ID_CUENTASDFC_ID_CLIENTEFINALSDFC equals cl.ID_CUENTASDFC_ID_CLIENTEFINALSDFC
                                  where cl.ID_CUENTASFDC == idCuenta.Substring(0,15)
                                     && (
                                     (busqueda == string.Empty ? true : SqlMethods.Like(o.ID_OPORTUNIDAD, "%" + busqueda + "%"))
                                     || (busqueda == string.Empty ? true : SqlMethods.Like(o.NOMBRE_OPORTUNIDAD, "%" + busqueda + "%"))
                                     || (busqueda == string.Empty ? true : SqlMethods.Like(o.ETAPA, "%" + busqueda + "%"))
                                     || (busqueda == string.Empty ? true : SqlMethods.Like(o.ANCHO_BANDA, "%" + busqueda + "%"))
                                     || (busqueda == string.Empty ? true : SqlMethods.Like(p.NOMBRE_PROYECTO, "%" + busqueda + "%"))
                                     )
                                  select new
                                  {
                                      id_oportunidadSF = o.ID_OPORTUNIDADSDFC,
                                      id_oportunidad = o.ID_OPORTUNIDAD,
                                      nombre_oportunidad = o.NOMBRE_OPORTUNIDAD,
                                      etapa = o.ETAPA,
                                      ancho_banda = o.ANCHO_BANDA,
                                      id_proyecto = o.ID_PROYECTOSFDC,
                                      nombre_proyecto = p.NOMBRE_PROYECTO
                                  };

                    dt = ConvertData.ToDataTable(detail4);

                    break;

                default:
                    return dt;

            }

            return dt;

        }

        /// <summary>
        /// Retorna datatable con los artículos (ancho de banda) existentes
        /// </summary>
        /// <returns></returns>
        public static DataTable GetArticulos()
        {
            var q = from a in DataContext.ARTICULO
                    orderby a.ARTICULO1
                    select a;

            return ConvertData.ToDataTable(q);
        }

    }
}
